package cn.achuan.spring.springcloud.demo;

import com.google.common.base.MoreObjects;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;

/**
 * 商品事件。
 * 当商品配置变更时，如：修改、删除等，就需要构建一个商品事件。
 *
 * 在构建一个事件时需要指定originService和destinationService。对于事件发布者来说originService就是自己，
 * 而destinationService则是指将事件发布到那些微服务实例。
 * destinationService配置的格式为：{serviceId}:{appContextId}，
 * 在配置时serviceId和appContextId可以使用通配符，如果这两个变量都使用通配符的话(*:**)，则事件将发布到所
 * 有的微服务实例。如只省略appContextId，则事件只会发布给指定微服务的所有实例，如：userservice:**，则只会
 * 将事件发布给userservice微服务。
 */
public class ProductEvent extends RemoteApplicationEvent {
    /** 消息类型：更新商品，值为: {@value} */
    public static final String P_UPDATE = "update";
    /** 消息类型：删除商品，值为: {@value} */
    public static final String P_DELETE = "delete";

    private String action;
    private String itemCode;

    public ProductEvent() {
        super();
    }

    public ProductEvent(Object source, String originService, String destinationService, String action, String itemCode) {
        super(source, originService, destinationService);
        this.action = action;
        this.itemCode = itemCode;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(this)
                .add("action", this.getAction())
                .add("itemCode", this.getItemCode()).toString();
    }

    public String getAction() {
        return action;
    }
    public void setAction(String action) {
        this.action = action;
    }

    public String getItemCode() {
        return itemCode;
    }
    public void setItemCode(String itemCode) {
        this.itemCode = itemCode;
    }
}